/******************************************************************************\
*                                                                              *
*     File: TestSet_output.h                                                   *
*                                                                              *
*   Author: Douwe A. van Twillert                                              *
*  Purpose: Defines hooks to generate output for the TestSet test framework    *
*  Version: 1.0      TWI 20070315                                              *
*           - Initial version                                                  *
*  Version: 1.0.1    AKK 20070322                                              *
*           - TestSet_output_not_reached_failed(...) added                     *
*  Version: 1.0.2    TWI 20070323                                              *
*           - Changed all tabs to spaces                                       *
*           - Made versioning comments consistent                              *
*  Version: 1.1       TWI 20080221                                             *
*           - reformatted to make prints easier to read and for consistency    *
*  Version: 1.2      TWI 20080603                                              *
*           - output added for setup and setup once                            *
*                                                                              *
\******************************************************************************/


#ifndef __TEST_SET_OUTPUT
#define __TEST_SET_OUTPUT

/*
 *  System Includes
 */

/*
 *  Module defines
 */

/*
 *  Module typedefinitions
 */

/*
 *  Module Exported Global data
 */

/*
 *  Module Exported functions
 */

 /* output can be generated before and after each TestSet and TestCase */
extern void TestSet_output_all_test_sets_before( int nr_of_tests                                 );
extern void TestSet_output_all_test_sets_after ( int passed,                 int failed,
                                                 int total,                  int nr_of_test_sets );
extern void TestSet_output_test_set_before     ( const char* test_set_name,  int nr_of_tests     );
extern void TestSet_output_test_set_after      ( const char* test_set_name,  int passed,
                                                 int failed, int nr_of_tests                     );
extern void TestSet_output_test_case_before    ( const char* test_case_name                      );
extern void TestSet_output_test_case_after     ( const char* test_case_name, bool test_result    );


/* The verification failed output */
extern void TestSet_output_verification_failed( const char* file, int linenr, const char* expression );
extern void TestSet_output_setup_once_failed  ( const char* test_case_name );
extern void TestSet_output_setup_failed       ( const char* test_case_name );
// AKK 20070322 added
extern void TestSet_output_not_reached_failed ( const char* file, int linenr   );
// AKK - END

/* The output for expected and caght Signals and assertions */
extern void TestSet_output_expect_signal           ( int signal_nr );
extern void TestSet_output_expect_assertion_failed ();
extern void TestSet_output_handle_unexpected_signal( int a_signal  );

extern void TestSet_output_unhandled_exception( const char* test_case_name, const char* cause );

/* Internal error output functions */
extern void TestSet_output_ensure( const char* file,
								   int linenr,
                                   const char* function,
                                   const char* condition      );
extern void TestSet_output_magic( const char* file,
                                  int linenr,
                                  const char* function,
                                  const char* kind,
                                  unsigned int set_magic,
                                  unsigned int expected_magic );

#endif  /* __TEST_SET */
